import router from '@/router';
import store from '@/store';
import axios from 'axios'
import qs from 'qs'
import { warningAlert } from '@/utils/alert'


var baseURL = null;
//判断当前是否处于开发环境
if (process.env.NODE_ENV === 'development') {
    baseURL = '/api'
} else {
    baseURL = ''
}


//自定义axios请求
const instance = axios.create({
    baseURL,
    timeout: 500
})


//请求拦截器
instance.interceptors.request.use((config) => {
    //请求头信息
    // console.group('本次请求的地址为:' + config.url)
    //处理token令牌的校验
    // console.groupEnd()

    if (config.url !== '/api/userlogin') {
        //处理token令牌的校验
        if (store.state.user) {
            config.headers.authorization = store.state.user.token
        } else {
            router.push('/login')
        }
    }
    return config
}, (err) => {
    return Promise.reject(err)
})


//响应拦截器
instance.interceptors.response.use((res) => {
    //响应成功的结果
    //请求头信息
    // console.group('本次响应的地址为:'+res.config.url)
    //服务端统一返回的状态码不为200时
    // console.groupEnd()

    //登录已过期或访问权限受限
    if (res.data.code !== 200) {
        warningAlert(res.data.msg)
        router.push('/login')
    }

    return res
}, (err) => {
    return Promise.reject(err)
})


// 封装get请求
/**
 * @params url
 * @params params = null
 * @return  promise对象
*/
export function get(url, params = null) {
    return new Promise((resolve, reject) => {
        instance.get(url, { params }).then(res => {
            //成功
            resolve(res.data)
        }).catch(err => {
            //失败
            reject(err.data)
        })
    })
}

// 封装post请求 
/**
 * @params url
 * @params params 
 * @params isFile  = false  是否有文件上传
 * @return promise对象
*/
export function post(url, params, isFile = false) {
    // 处理表单数据(不带有文件)  进行参数序列化操作
    var data = qs.stringify(params);
    //处理配置信息
    var config = {
        headers: {
            "Content-Type": "application/x-www-form-urlencoded"
        }
    }

    // 处理带有文件的表单数据
    /**
     * params = {
     *  username:'root',
     *  pass:123,
     *  img:File(资源)
     * }
     * */
    if (isFile) {
        //formData对象
        data = new FormData();
        for (let i in params) {
            //追加
            data.append(i, params[i])
        }
        //处理请求头信息
        config = {
            headers: {
                "Content-Type": "multipart/form-data"
            }
        }
    }

    //处理配置信息  包含请求头信息
    return new Promise((resolve, reject) => {
        instance.post(url, data, config).then(res => {
            //成功
            resolve(res.data)
        }).catch(err => {
            //失败
            reject(err.data)
        })
    })
}